<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019-09-25
 * Time: 14:01
 */

namespace App\Models;

/**
 * Class Region
 * @package App\Models
 */
class Region extends BaseModel
{
    /**
     * 与模型关联的数据表
     *
     * @var string
     */
    protected $table = 'region';

    /**
     * 主键
     * @var string
     */
    protected $primaryKey = 'id';

    /**
     * 子集数据
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function children(){
        return $this->hasMany(self::class, 'parent_id', 'id')
            ->select(['id', 'areaname', 'parent_id']);
    }

    /**
     * 市、县区数据集合
     * @param $query
     */
    public function scopeCityAndDistrict($query){
        $query->with('children.children');
    }

//    /**
//     * @var array
//     */
//    protected $appends = ['children','parent','is_get_parent'];
//
//    /**
//     * @return \Illuminate\Database\Eloquent\Relations\HasOne
//     */
//    protected function hasChildren(){
//        return $this->hasOne(Region::class,'parent_id','region_id');
//    }
//
//    /**
//     * @return \Illuminate\Database\Eloquent\Relations\HasOne
//     */
//    protected function hasParent(){
//        return $this->hasOne(Region::class,'region_id','parent_id');
//    }
//
//    /**
//     * @return bool
//     */
//    public function getChildrenAttribute()
//    {
//        if ($has= static::hasChildren()->first()){
//            return true;
//        }
//        return false;
//    }
//
//    /**
//     * @return bool
//     */
//    public function getParentAttribute()
//    {
//        if ($has= static::hasParent()->select('region_id','region_name','parent_id')->first()){
//            return $has;
//        }
//        return false;
//    }
//    /**
//     * @param $value
//     * @return bool|mixed
//     */
//    public function getIsGetParentAttribute($value)
//    {
//        return isset($this->attributes['is_get_parent']) ? $this->attributes['is_get_parent'] : true;
//    }
//
//    /**
//     * 通过设置此虚拟字段来判断是否加载parent父集
//     * @param $value
//     * @return mixed
//     */
//    public function setIsGetParentAttribute($value = false)
//    {
//        return $this->attributes['is_get_parent'] = $value;
//    }
//
//    /**
//     * @param $value
//     * @return mixed
//     */
//    public function setChildrenAttribute($value)
//    {
//        $this->attributes['children'] = $value;
//    }
}